﻿namespace MicroCloud.Authorization.Dtos
{
    #region "输出DTO：用户数据权限"
    /// <summary>
    /// 输出DTO：用户数据权限
    /// </summary>
    [MapFrom(typeof(EntityUser))]
    public class EntityUserOutputDto : IOutputDto, IDataAuthEnabled
    {
        #region "属性"
        #region "获取或设置 编号"
        /// <summary>
        /// 获取或设置 编号
        /// </summary>
        public long Id { get; set; }
        #endregion
        #region "获取或设置 用户编号"
        /// <summary>
        /// 获取或设置 用户编号
        /// </summary>
        public long UserId { get; set; }
        #endregion
        #region "获取或设置 用户名称"
        /// <summary>
        /// 获取或设置 用户名称
        /// </summary>
        public string UserName { get; set; }
        #endregion
        #region "获取或设置 用户昵称"
        /// <summary>
        /// 获取或设置 用户昵称
        /// </summary>
        public string UserNickname { get; set; }
        #endregion
        #region "获取或设置 数据编号"
        /// <summary>
        /// 获取或设置 数据编号
        /// </summary>
        public long EntityId { get; set; }
        #endregion
        #region "获取或设置 业务实体名称"
        /// <summary>
        /// 获取或设置 业务实体名称
        /// </summary>
        public string EntityName { get; set; }
        #endregion
        #region "获取或设置 业务实体类型"
        /// <summary>
        /// 获取或设置 业务实体类型
        /// </summary>
        public string EntityType { get; set; }
        #endregion
        #region "获取或设置 数据权限操作"
        /// <summary>
        /// 获取或设置 数据权限操作
        /// </summary>
        public DataAuthOperation Operation { get; set; }
        #endregion
        #region "获取或设置 过滤条件组"
        /// <summary>
        /// 获取或设置 过滤条件组
        /// </summary>
        public FilterGroup FilterGroup { get; set; }
        #endregion

        #region "获取或设置 是否锁定"
        /// <summary>
        /// 获取或设置 是否锁定
        /// </summary>
        public bool IsLocked { get; set; }
        #endregion

        #region "获取或设置 创建时间"
        /// <summary>
        /// 获取或设置 创建时间
        /// </summary>
        public DateTime CreatedTime { get; set; }
        #endregion

        #region "获取或设置 更新时间 IUpdatedTime、IUpdateAudited 可装载接口，在数据更新时可自动设置当前时间"
        /// <summary>
        /// 获取或设置 更新时间
        /// </summary>
        public DateTime? UpdatedTime { get; set; }
        #endregion

        #region "获取或设置 数据版本 IDataVersion 可装载接口，用于乐观并发处理"
        /// <summary>
        /// 获取或设置 数据版本
        /// 在实体提交验证后（增加、修改）会自动设置一个时间戳值持久化至数据库
        /// 修改、移除时取实体数据库值与提交值比对，如不一致则拒绝提交
        /// </summary>
        public long DataVersion { get; set; }
        #endregion

        //Implementation of IDataAuthEnabled
        #region "获取或设置 是否可更新的数据权限状态"
        /// <summary>
        /// 获取或设置 是否可更新的数据权限状态
        /// </summary>
        public bool Updatable { get; set; }
        #endregion
        #region "获取或设置 是否可删除的数据权限状态"
        /// <summary>
        /// 获取或设置 是否可删除的数据权限状态
        /// </summary>
        public bool Deletable { get; set; }
        #endregion

        #endregion

        #region "构造函数"
        #region "初始化一个输出DTO：用户数据权限的新实例"
        /// <summary>
        /// 初始化一个输出DTO：用户数据权限 <see cref="EntityUserOutputDto"/> 的新实例
        /// </summary>
        public EntityUserOutputDto()
        { }
        #endregion
        #region "初始化一个输出DTO：用户数据权限的新实例"
        /// <summary>
        /// 初始化一个输出DTO：用户数据权限 <see cref="EntityUserOutputDto"/> 的新实例
        /// </summary>
        /// <param name="entityUser"></param>
        public EntityUserOutputDto(EntityUser entityUser)
        {
            Id = entityUser.Id;
            UserId = entityUser.UserId;
            EntityId = entityUser.EntityId;
            Operation = entityUser.Operation;
            FilterGroup = entityUser.FilterGroupJson.FromJsonString<FilterGroup>();
            IsLocked = entityUser.IsLocked;
            CreatedTime = entityUser.CreatedTime;
            UpdatedTime = entityUser.UpdatedTime;
            DataVersion = entityUser.DataVersion;
        }
        #endregion

        #endregion

    }
    #endregion

}
